package com.xbongbong.paas.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import com.xbongbong.paas.enums.clazz.AggsTypeClass;
import com.xbongbong.saas.constant.StringConstant;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author 梁鲁江
 * @version v1.0
 * @date 2019/1/23 14:38
 * @since v1.0
 */
public enum UnitEnum {
    /**
     * 单位个
     */
    NUMBER("numbers", "enum.unit.name.number"),
    /**
     * 单位元
     */
    MONEY("money", "enum.unit.name.money"),
    /**
     * 单位自定义
     */
    CUSTOM("custom", "enum.unit.name.custom"),
    ;
    private String alias;
    private String name;

    UnitEnum(String alias, String name) {
        this.alias = alias;
        this.name = name;
    }

    public String getAlias() {
        return alias;
    }

    public String getName() {
        return I18nMessageUtil.getMessage(name);
    }
    public static List<UnitEnum> getAllEnum() {
        List<UnitEnum> list = new ArrayList<>();
        list.addAll(Arrays.asList(values()));
        return list;
    }

    public static List<AggsTypeClass> list() {
        List<AggsTypeClass> list = new ArrayList<>();
        for (UnitEnum cache : values()) {
            AggsTypeClass aggsTypeClass = new AggsTypeClass();
            aggsTypeClass.setAlias(cache.getAlias());
            aggsTypeClass.setName(cache.getName());
            list.add(aggsTypeClass);
        }
        return list;
    }
    public static UnitEnum getByAlias(String alias) {
        for (UnitEnum unitEnum: values()) {
            if(unitEnum.getAlias().equals(alias)){
                return unitEnum;
            }
        }
        return null;
    }

    public static List<AggsTypeClass> getListByAlias(String alias) {
        List<AggsTypeClass> list = new ArrayList<>();
        for (UnitEnum cache : values()) {
            if(cache.getAlias().equals(alias)){
                AggsTypeClass aggsTypeClass = new AggsTypeClass();
                aggsTypeClass.setAlias(cache.getAlias());
                aggsTypeClass.setName(cache.getName());
                list.add(aggsTypeClass);
                continue;
            }
        }
        return list;
    }

    /**
     * 根据别名匹配枚举，无匹配则返回"404"
     *
     * @param alias  别名
     * @return com.xbongbong.paas.enums.UnitEnum
     * @author zyy
     * @date 2022/3/31
     * @version v1.0
     */
    public static String getByAliasNotNull(String alias) {
        UnitEnum unitEnum = getByAlias(alias);
        return unitEnum != null ? unitEnum.getName() : StringConstant.NOT_FIND;
    }
}
